<?php
/**
 * Service_Mail
 *
 * Класс Service_Mail осуществляет работу c эл. полчтой
 *
 * @author Егоров Александр <slamer@slamer.ru>
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */

class Service_Mail {

  private $subject; // Тема
  private $message; // Сообщение
  private $to;  // Получатель (например, Дмитрий Кузьма)
  private $cc;  // Эл. почта получателя
  private $bcc; // Копия письма
  private $replyTo; // Эл. почта отправителя
  private $attachment = array();  // Вложения
  /**
   * Конструктор
   *
   * @param string $subject - тема
   * @param string $message - сообщение
   * @param mixed $toList - имя получателя (например, Дмитрий Кузьма)
   * @param mixed $ccList - эл. почта
   * @param mixed $bccList - копия письма
   * @param string $replyTo - эл. почта отправителя
   */
  function __construct($subject, $message, $toList, $ccList = 0, $bccList = 0, $replyTo = 0) {
    $this->replyTo = $replyTo;
    $this->subject = $subject;
    $this->message = $message;

    // set the To: recipient(s)
    if ( is_array($toList) ) $this->to = join( $toList, "," );
    else $this->to = $toList;

    // set the Cc: recipient(s)
    if (is_array($ccList) && sizeof($ccList)) $this->cc = join( $ccList, "," );
    elseif ( $ccList ) $this->cc = $ccList;

    // set the Bcc: recipient(s)
    if (is_array($bccList) && sizeof($bccList)) $this->bcc = join( $bccList, "," );
    elseif ( $bccList ) $this->bcc = $bccList;

  }

  /**
   * Метод отправляет сообщения по указанным адресам эл. почты
   *
   * @return unknown
   */
  function send () {
    //Создаем заголовки письма
    $this->headers = "From: <" . EMAIL . ">\n";
    $this->headers .= 'MIME-Version: 1.0' . "\n";
    $this->headers .= 'Content-Type: text/html; charset=utf-8' . "\n";
    $this->headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
    //Задаем адрес, по которому ожидаем ответ
    if ( $this->replyTo ) $this->headers .= "Reply-To: " . $this->replyTo . "\n";
    // Задаем получателей
    if ( $this->cc ) $this->headers .= "Cc: " . $this->cc . "\n";
    // Задаем скрытые копии
    if ( $this->bcc ) $this->headers .= "Bcc: " . $this->bcc . "\n";
    //Отправляем сообщение
    // Если отправка идет на почту
    if ( ! defined( 'MAIL_CLASS_DEFINED' ) ) {
	    return mail ( $this->to, $this->subject, $this->message, $this->headers );
    }
    else { // Если отправка идет в файл
      $strToFile = "";
      $strToFile .= "ЗАГОЛОВКИ:\n";
      $strToFile .= $this->headers;
      $strToFile .= "\n=============\n";
      $strToFile .= "КОМУ:\n";
      $strToFile .= $this->to;
      $strToFile .= "\n=============\n";
      $strToFile .= "ТЕМА:\n";
      $strToFile .= $this->subject;
      $strToFile .= "\n=============\n";
      $strToFile .= "СООБЩЕНИЕ:\n";
      $strToFile .= $this->message;
      $strToFile .= "\n=============\n";
      $f = fopen(ABSPATH . 'content/mail/' . date("Y_m_d__H_i_s") . '.txt', 'w');
      fwrite($f, $strToFile);
      fclose($f);
    }
  }

  /**
   * Метод проверяет, корректно ли введен адрес электроноой почты
   *
   * @param string $strEMail - e-mail
   * @return bool
   */
  public static function isEMailCorrect($strEMail) {
    return preg_match("/^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/", $strEMail);
  }

}
?>